#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main()
//{
//    return 0;
//}
//int max(int a, int b)
//{
//    return a > b ? a : b;
//}
//
//int deleteAndEarn(int* nums, int numsSize) {
//    int hash[10001] = { 0 };
//    int f[10001] = { 0 };
//    for (int i = 0; i < numsSize; i++)
//    {
//        hash[nums[i]]++;
//    }
//    f[0] = hash[0];
//    f[1] = max(hash[0], hash[1]);
//    int point = 0;
//    for (int i = 2; i < 10002; ++i)
//    {
//        f[i] = max(f[i - 2] + nums[i], f[i - 1]);
//        if (f[i] == f[i - 2] + nums[i])
//            point += f[i] * i;
//    }
//    return point;
//}
#include<stdio.h>
int max(int a, int b)
{
    return a > b ? a : b;
}

int deleteAndEarn(int* nums, int numsSize) {
    int hash[10001] = { 0 };
    int value[10001] = { 0 };
    for (int i = 0; i < numsSize; i++)
    {
        hash[nums[i]]++;
    }
    for (int i = 0; i < 10001; ++i)
    {
        value[i] = hash[i] * i;
    }
    int f[10001] = { 0 };
    for (int i = 2; i < 10001; ++i)
    {
        f[i] = max(f[i - 1], f[i - 2] + value[i]);
    }
    return f[10000];
}
int main()
{
    int nums[] = { 1 };
    deleteAndEarn(nums, 1);
    return 0;
}